/*package br.univali.compiladores.testes;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import java.io.File;
import java.io.IOException;

import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;

import br.univali.compiladores.compilador.MaquinaVirtual;

public class MaquinaVirtualTest {

	private static final String LIBS_DIRECTORY = "libs";
	private MaquinaVirtual maquinaVirtual;
	
	@Before
	public void inicializaAmbienteDeTestes() {
		maquinaVirtual = new MaquinaVirtual();
	}
	
	@Test
	public void WRTDiminuiTopoAumentaPonteiro() {
		maquinaVirtual.LDI(1);
		maquinaVirtual.WRT();
		
		assertEquals(-1, maquinaVirtual.TOPO); //Topo sem nada
		assertEquals(3, maquinaVirtual.PONTEIRO);
	}
	
	*//**
	 * ###########################
	 * Somente para testes!!!!
	 * ###########################
	 *//*
	@Test
	public void testarProcesso() throws IOException {
		File f = new File(System.getProperty("user.dir") + File.separator + LIBS_DIRECTORY + File.separator + "mv.jar");
		
		Process p = Runtime.getRuntime().exec("cmd /c start java -jar " + f.getAbsolutePath(), new String[]{
			"ALI 2","REA 1", "STR 1" , "REA 1", "STR 2", 
			"LDV 1", "LDV 2", "BGR 0", "JMF 13", "LDV 1", 
			"WRT 0", "JMP 15", "LDV 2", "WRT 0", "STP 0"
		});
		boolean terminou = false;
		
		while(!terminou){
			try{
				System.out.println(p.exitValue());
				terminou = true;
			} catch(Exception e){
				e.printStackTrace();
			}
		}
	}
	
	
	@Test
	public void SUBdiminuiValores() {
		maquinaVirtual.LDI(1);
		maquinaVirtual.LDI(2);

		maquinaVirtual.SUB();

		assertEquals(0, maquinaVirtual.TOPO); // contem um elemento na posicao 0
		assertEquals(-1, maquinaVirtual.getPilha().get(maquinaVirtual.TOPO));
		assertEquals(4, maquinaVirtual.PONTEIRO);
		
		inicializaAmbienteDeTestes();
		
		maquinaVirtual.LDI(-1.2f);
		maquinaVirtual.LDI(1);
		
		maquinaVirtual.SUB();
		
		assertEquals(0, maquinaVirtual.TOPO); // contem um elemento na posicao 0
		assertEquals(-2.2f, maquinaVirtual.getPilha().get(maquinaVirtual.TOPO));
		assertEquals(4, maquinaVirtual.PONTEIRO);
	}
	
	@Test
	public void MULTmultiplicaValores() {
		maquinaVirtual.LDI(2);
		maquinaVirtual.LDI(3);
		
		maquinaVirtual.MUL();
		
		assertEquals(0, maquinaVirtual.TOPO); 
		assertEquals(6, maquinaVirtual.getPilha().get(maquinaVirtual.TOPO));
		assertEquals(4, maquinaVirtual.PONTEIRO);
	}
	
	@Test
	public void testSTR() {
		maquinaVirtual.LDI(2);
		maquinaVirtual.LDI(3);
		
		maquinaVirtual.STR(0);
		
		assertEquals(4, maquinaVirtual.PONTEIRO);
		assertEquals(0, maquinaVirtual.TOPO);
		assertEquals(3, maquinaVirtual.getPilha().get(maquinaVirtual.TOPO));
	}
	
	@Test
	public void testSMR() {
		maquinaVirtual.LDI(2);
		maquinaVirtual.LDI(3);
		
		maquinaVirtual.SMR();
		
		assertTrue((Boolean) maquinaVirtual.getPilha().get(maquinaVirtual.TOPO));
		
		inicializaAmbienteDeTestes();
		
		maquinaVirtual.LDI(3);
		maquinaVirtual.LDI(2);
		
		maquinaVirtual.SMR();
		
		assertFalse((Boolean) maquinaVirtual.getPilha().get(maquinaVirtual.TOPO));
		assertEquals(4, maquinaVirtual.PONTEIRO);
		assertEquals(0, maquinaVirtual.TOPO);
	}
	
	@Test
	public void testSME() {
		maquinaVirtual.LDI(3);
		maquinaVirtual.LDI(3);
		
		maquinaVirtual.SME();
		
		assertTrue((Boolean) maquinaVirtual.getPilha().get(maquinaVirtual.TOPO));
		
		inicializaAmbienteDeTestes();
		
		maquinaVirtual.LDI(3);
		maquinaVirtual.LDI(2);
		
		maquinaVirtual.SME();
		
		assertFalse((Boolean) maquinaVirtual.getPilha().get(maquinaVirtual.TOPO));
		assertEquals(4, maquinaVirtual.PONTEIRO);
		assertEquals(0, maquinaVirtual.TOPO);
		
		inicializaAmbienteDeTestes();
		
		maquinaVirtual.LDI(2);
		maquinaVirtual.LDI(3);
		
		maquinaVirtual.SME();
		
		assertTrue((Boolean) maquinaVirtual.getPilha().get(maquinaVirtual.TOPO));
	}
	
	@Test
	@Ignore
	public void testREA() {
		//Verificar com o professor
		
	}
	
	@Test
	public void testOR() {
		maquinaVirtual.LDI(true);
		maquinaVirtual.LDI(false);
		
		maquinaVirtual.OR();
		
		assertTrue((Boolean) maquinaVirtual.getPilha().get(maquinaVirtual.TOPO));
		assertEquals(4, maquinaVirtual.PONTEIRO);
		assertEquals(0, maquinaVirtual.TOPO);
		
		inicializaAmbienteDeTestes();
		
		maquinaVirtual.LDI(true);
		maquinaVirtual.LDI(true);
		
		maquinaVirtual.OR();
		
		assertTrue((Boolean) maquinaVirtual.getPilha().get(maquinaVirtual.TOPO));
		assertEquals(4, maquinaVirtual.PONTEIRO);
		assertEquals(0, maquinaVirtual.TOPO);
		
		inicializaAmbienteDeTestes();
		
		maquinaVirtual.LDI(false);
		maquinaVirtual.LDI(true);
		
		maquinaVirtual.OR();
		
		assertTrue((Boolean) maquinaVirtual.getPilha().get(maquinaVirtual.TOPO));
		assertEquals(4, maquinaVirtual.PONTEIRO);
		assertEquals(0, maquinaVirtual.TOPO);
		
		inicializaAmbienteDeTestes();
		
		maquinaVirtual.LDI(false);
		maquinaVirtual.LDI(false);
		
		maquinaVirtual.OR();
		
		assertFalse((Boolean) maquinaVirtual.getPilha().get(maquinaVirtual.TOPO));
		assertEquals(4, maquinaVirtual.PONTEIRO);
		assertEquals(0, maquinaVirtual.TOPO);
	}
	
	@Test
	public void testNOT() {
		maquinaVirtual.LDI(false);
		
		maquinaVirtual.NOT();
		
		assertTrue((Boolean) maquinaVirtual.getPilha().get(maquinaVirtual.TOPO));
		assertEquals(3, maquinaVirtual.PONTEIRO);
		assertEquals(0, maquinaVirtual.TOPO);
		
		inicializaAmbienteDeTestes();
		
		maquinaVirtual.LDI(true);
		
		maquinaVirtual.NOT();
		
		assertFalse((Boolean) maquinaVirtual.getPilha().get(maquinaVirtual.TOPO));
	}
	
	@Test
	public void testLDS() {
		maquinaVirtual.LDS(1);
		
		assertEquals(1, maquinaVirtual.getPilha().get(maquinaVirtual.TOPO));
		assertEquals(2, maquinaVirtual.PONTEIRO);
		assertEquals(0, maquinaVirtual.TOPO);
	}
	
	@Test
	public void testLDR() {
		maquinaVirtual.LDR(1);
		
		assertEquals(1, maquinaVirtual.getPilha().get(maquinaVirtual.TOPO));
		assertEquals(2, maquinaVirtual.PONTEIRO);
		assertEquals(0, maquinaVirtual.TOPO);
	}
	
	@Test
	public void testLDI() {
		maquinaVirtual.LDI(1);
		
		assertEquals(1, maquinaVirtual.getPilha().get(maquinaVirtual.TOPO));
		assertEquals(2, maquinaVirtual.PONTEIRO);
		assertEquals(0, maquinaVirtual.TOPO);
	}
	
	@Test
	public void testLDB() {
		maquinaVirtual.LDB(1);
		
		assertEquals(1, maquinaVirtual.getPilha().get(maquinaVirtual.TOPO));
		assertEquals(2, maquinaVirtual.PONTEIRO);
		assertEquals(0, maquinaVirtual.TOPO);
	}
	
	@Test
	public void testLDV() {
		maquinaVirtual.LDI(2);
		maquinaVirtual.LDI(8);
		
		maquinaVirtual.LDV(0);
		
		assertEquals(2, maquinaVirtual.getPilha().get(maquinaVirtual.TOPO));
		assertEquals(4, maquinaVirtual.PONTEIRO);
		assertEquals(2, maquinaVirtual.TOPO); // 3 na pilha, 2, 8 e 2, LDV faz a cópia mas não apaga a antiga referencia
	}
	
	@Test
	public void testJMT() {
		maquinaVirtual.LDI(2);
		maquinaVirtual.LDI(true);

		maquinaVirtual.JMT(0);
		
		assertEquals(0, maquinaVirtual.PONTEIRO);
		assertEquals(0, maquinaVirtual.TOPO);
	}
	
	@Test
	public void testJMP() {
		maquinaVirtual.LDI(1);
		maquinaVirtual.LDI(2);
		
		maquinaVirtual.JMP(0);
		
		assertEquals(0, maquinaVirtual.PONTEIRO);
	}
}*/